package com.powernode.mybatis.mapper;

import com.powernode.mybatis.pojo.Car;
import org.apache.ibatis.annotations.MapKey;

import java.util.List;
import java.util.Map;

public interface CarMapper {
    /**
     * 查询总记录条数
     * @return
     */
    Long selectTotal();

    /**
     * 查询所有car信息，通过驼峰命名自动映射
     * @return
     */
    List<Car> selectByMapUnderscoreToCamelCase();

    /**
     * 查询所有的car信息，底层用ResultMap标签进行结果映射
     * @return
     */
    List<Car> selectByResultMap();

    /**
     * 查询所有的car，返回大Map集合
     * Map集合的key是每条记录的主键值
     * Map集合的value是每条记录
     * @return
     */
    @MapKey("id") // 将查询结果的id值作为大Mao集合的key
    Map<Long,Map<String,Object>> selectAllRetMap();

    /**
     * 查询所有car的信息，返回由map集合组成的List集合
     * @return
     */
    List<Map<String,Object>> selectAllRetListMap();

    /**
     * 根据id进行查询，返回Map集合
     * @param id
     * @return
     */
    Map<String,Object> selectByIdRetMap(Long id);

    /**
     * 根据id进行查询，id是主键，查出来的数据条数肯定只有一条，那我们能不能使用List集合进行接收呢？
     * @param id
     * @return
     */
    List<Car> selectById2(Long id);

    /**
     * 根据品牌进行模糊查询
     * 模糊查询的结果可能会有多个，但是我采用一个pojo进行接收会有问题吗？
     * @param brand
     * @return
     */
    Car selectByBrandLike(String brand);

    /**
     * 查询所有的车辆信息
     * @return
     */
    List<Car> selectAll();

    /**
     * 根据id进行查询
     * @param id
     * @return
     */
    Car selectById(Long id);
}
